<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" >

<title>Ubuntu24上开服MC1.21教程 | 尘听的技术栈</title>

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="shortcut icon" href="http://gitee.com/favicon.ico?v=1744287732235">
<link rel="stylesheet" href="http://gitee.com/styles/main.css">



<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>



    <meta name="description" content="Ubuntu24 系统图形界面 Minecraft1.21 服务端配置文档

系统初始化
1.1 更新系统
在开始之前，确保系统是最新的：

sudo apt update
sudo apt upgrade -y
1.2 安装必要工具
安装..." />
    <meta name="keywords" content="Ubuntu,Minecraft,服务器" />
  </head>
  <body>
    <div id="app" class="main">

      <div class="sidebar" :class="{ 'full-height': menuVisible }">
  <div class="top-container" data-aos="fade-right">
    <div class="top-header-container">
      <a class="site-title-container" href="http://gitee.com">
        <img src="http://gitee.com/images/avatar.png?v=1744287732235" class="site-logo">
        <h1 class="site-title">尘听的技术栈</h1>
      </a>
      <div class="menu-btn" @click="menuVisible = !menuVisible">
        <div class="line"></div>
      </div>
    </div>
    <div>
      
        
          <a href="/" class="site-nav">
            首页
          </a>
        
      
        
          <a href="/archives" class="site-nav">
            归档
          </a>
        
      
        
          <a href="/tags" class="site-nav">
            标签
          </a>
        
      
        
          <a href="/post/about" class="site-nav">
            关于
          </a>
        
      
    </div>
  </div>
  <div class="bottom-container" data-aos="flip-up" data-aos-offset="0">
    <div class="social-container">
      
        
      
        
      
        
      
        
      
        
      
    </div>
    <div class="site-description">
      
    </div>
    <div class="site-footer">
      Powered by Chenting_lg | <a class="rss" href="http://gitee.com/atom.xml" target="_blank">RSS</a>
    </div>
  </div>
</div>


      <div class="main-container">
        <div class="content-container" data-aos="fade-up">
          <div class="post-detail">
            <h2 class="post-title">Ubuntu24上开服MC1.21教程</h2>
            <div class="post-date">2025-03-21</div>
            
            <div class="post-content" v-pre>
              <p>Ubuntu24 系统图形界面 Minecraft1.21 服务端配置文档</p>
<ol>
<li>系统初始化<br>
1.1 更新系统<br>
在开始之前，确保系统是最新的：</li>
</ol>
<p>sudo apt update<br>
sudo apt upgrade -y<br>
1.2 安装必要工具<br>
安装一些常用的工具，如 curl、wget、unzip 等：<br>
sudo apt install -y curl wget unzip</p>
<hr>
<ol start="2">
<li>安装Node.js<br>
MCSM 需要 Node.js 环境。截至 2025年3月2日，Node.js 的最新稳定版本是 23.6.0，长期支持（LTS）版本是 22.x。以下是安装步骤：<br>
2.1 使用ubuntu官方包安装<br>
sudo apt install nodejs<br>
sudo apt install npm<br>
2.2 验证安装<br>
运行以下命令，确保 Node.js 和 npm 已正确安装：<br>
node -v<br>
npm -v</li>
</ol>
<hr>
<ol start="3">
<li>下载并配置 Minecraft 服务端<br>
3.1 下载服务端文件<br>
在 你的Windows电脑上下载以下文件：<br>
•	Minecraft 服务端（server.jar）<br>
•	Fabric 服务端（可选）<br>
•	MEFRP Linux 版（内网穿透工具）<br>
3.2 将文件传输到 Ubuntu<br>
通过 U 盘或网络将文件传输到 Ubuntu 的根目录（例如 /home/ct/）。<br>
3.3 解压 MEFRP<br>
解压 MEFRP 文件：<br>
unzip mefrp-linux.zip -d ~/mefrp<br>
3.4 初次调试 Minecraft 服务端<br>
这里使用的是1.21，故也需安装Java21<br>
sudo apt install openjdk-21-jdk<br>
安装完成后使用Java -version验证<br>
cd到sserver.jar的位置运行 Minecraft 服务端，确保它能正常工作：<br>
java -Xmx4G -jar server.jar<br>
首次运行会失败以及生成一些配置文件和目录。这是正常的<br>
cd到根目录或server.jar同意 EULA 协议：<br>
nano ~/eula.txt<br>
将 eula=false 改为 eula=true，保存并退出。<br>
重新运行，成功运行后可以先关掉，输入：<br>
stop</li>
</ol>
<hr>
<ol start="4">
<li>配置 MEFRP 内网穿透<br>
4.1 运行 MEFRP<br>
进入 MEFRP 目录并运行：<br>
cd ~/mefrp<br>
chmod +x ./mefrpc<br>
按照mefrpc官网，你账号下的隧道快捷启动参数来启动，如：<br>
sudo ./mefrpc -t 0cc8b3057b5bc7435de12973cd990c60 -p 62638<br>
4.2 测试公网连接<br>
在其他电脑上使用公网 IP 和端口连接 Minecraft 服务端，确保能正常进入游戏。</li>
</ol>
<hr>
<ol start="5">
<li>设置开机自启<br>
5.1 创建 Systemd 服务文件</li>
<li>创建 mcserver.service 文件：<br>
sudo nano /etc/systemd/system/mcserver.service</li>
<li>输入以下内容：<br>
[Unit]<br>
Description=Minecraft Server<br>
After=network.target</li>
</ol>
<p>[Service]<br>
User=ct<br>
WorkingDirectory=/home/ct/<br>
ExecStart=/usr/bin/java -Xmx4G -jar /home/ct/server.jar<br>
Restart=always</p>
<p>[Install]<br>
WantedBy=multi-user.target<br>
#注意：将 User=ct 和路径 /home/ct/ 替换为实际的用户名和路径。<br>
3.	保存并退出。<br>
4.	重新加载 Systemd 配置：<br>
sudo systemctl daemon-reload<br>
5.	启用并启动服务：<br>
sudo systemctl enable mcserver.service<br>
sudo systemctl start mcserver.service<br>
6.	检查服务状态：<br>
sudo systemctl status mcserver.service<br>
5.2 设置 MEFRP 开机自启</p>
<ol>
<li>创建 mefrp.service 文件：<br>
sudo nano /etc/systemd/system/mefrp.service</li>
<li>输入以下内容：<br>
[Unit]<br>
Description=MEFRP Service<br>
After=network.target</li>
</ol>
<p>[Service]<br>
User=ct<br>
WorkingDirectory=/home/ct/MCserver/mefrpc<br>
ExecStart=/home/ct/MCserver/mefrpc/mefrpc -t 0cc8b3057b5bc7435de12973cd990c60 -p 62638<br>
Restart=always</p>
<p>[Install]<br>
WantedBy=multi-user.target<br>
#注意：将 User=ct 和路径/home/ct/MCserver/mefrpc替换为实际的用户名和路径。<br>
3.	保存并退出。<br>
4.	重新加载 Systemd 配置：<br>
sudo systemctl daemon-reload<br>
5.	启用并启动服务：<br>
sudo systemctl enable mefrp.service<br>
sudo systemctl start mefrp.service<br>
6.	检查服务状态：<br>
sudo systemctl status mefrp.service</p>
<hr>
<ol start="6">
<li>安装MCSM<br>
6.1 下载MCSM<br>
下载 MCSM：<br>
sudo su -c &quot;wget -qO- https://script.mcsmanager.com/setup_cn.sh | bash&quot;<br>
启动方式</li>
</ol>
<h1 id="先启动面板守护进程">先启动面板守护进程。</h1>
<h1 id="这是用于进程控制终端管理的服务进程">这是用于进程控制，终端管理的服务进程。</h1>
<p>systemctl start mcsm-daemon.service</p>
<h1 id="再启动面板-web-服务">再启动面板 Web 服务。</h1>
<h1 id="这是用来实现支持网页访问和用户管理的服务">这是用来实现支持网页访问和用户管理的服务。</h1>
<p>systemctl start mcsm-web.service</p>
<h1 id="重启面板命令">重启面板命令</h1>
<p>systemctl restart mcsm-daemon.service<br>
systemctl restart mcsm-web.service</p>
<h1 id="停止面板命令">停止面板命令</h1>
<p>systemctl stop mcsm-web.service<br>
systemctl stop mcsm-daemon.service</p>
<hr>
<p>以下为配置简单控制（能在桌面通过图形化的方式就完成常用的基本控制）<br>
7. 配置MC服务端<br>
7.1 创建服务文件<br>
systemd 服务文件用于定义如何启动和管理 Minecraft 服务端</p>
<ol>
<li>打开终端，创建并编辑服务文件：<br>
sudo nano /etc/systemd/system/mcserver.service</li>
<li>在文件中输入以下内容<br>
[Unit]<br>
Description=Minecraft Server<br>
After=network.target</li>
</ol>
<p>[Service]<br>
ExecStart=/usr/bin/java -Xmx4G -jar /home/ct/MCserver/server.jar nogui<br>
WorkingDirectory=/home/ct/MCserver<br>
Restart=always<br>
User=ct<br>
Group=ct</p>
<p>[Install]<br>
WantedBy=multi-user.target<br>
o	ExecStart：启动 Minecraft 服务端的命令。<br>
o	WorkingDirectory：Minecraft 服务端的工作目录。<br>
o	User 和 Group：运行服务的用户和组（替换为你的用户名）。<br>
o	Restart=always：确保服务崩溃后自动重启</p>
<p>重新加载配置：<br>
sudo systemctl daemon-reload<br>
启动服务：<br>
sudo systemctl start mcserver.service<br>
检查服务状态：<br>
sudo systemctl status mcserver.service<br>
如果显示 active (running)，说明服务已成功启动<br>
将 mcserver.service 设置为开机自启<br>
启用开机自启：<br>
sudo systemctl enable mcserver.service<br>
验证是否启用成功：<br>
sudo systemctl is-enabled mcserver.service<br>
如果显示 enabled，说明开机自启已成功设置<br>
7.2.确保 sudo 不需要密码<br>
如果你不希望每次运行脚本时都输入密码，配置 sudo 免密码执行 systemctl 命令。<br>
步骤：</p>
<ol>
<li>打开 sudoers 文件：<br>
sudo visudo</li>
<li>在文件末尾添加以下内容：<br>
ct ALL=(ALL) NOPASSWD: /bin/systemctl enable mcserver.service, /bin/systemctl disable mcserver.service, /bin/systemctl is-enabled mcserver.service<br>
将 ct 替换为你的用户名</li>
</ol>
<p>7.3 创建管理服务的脚本<br>
创建一个脚本用于管理 mcserver.service 的开机自启：<br>
nano ~/MCserver/easy/mcserver-control.sh<br>
输入以下内容：<br>
#!/bin/bash</p>
<p>SERVICE_NAME=&quot;mcserver.service&quot;</p>
<p>ACTION=$(zenity --list <br>
--title=&quot;管理 mcserver.service&quot; <br>
--text=&quot;请选择操作：&quot; <br>
--column=&quot;操作&quot; &quot;启用开机自启&quot; &quot;禁用开机自启&quot; &quot;检查状态&quot;)</p>
<p>case $ACTION in<br>
&quot;启用开机自启&quot;)<br>
sudo systemctl enable $SERVICE_NAME<br>
zenity --info --text=&quot;已启用 $SERVICE_NAME 的开机自启。&quot;<br>
;;<br>
&quot;禁用开机自启&quot;)<br>
sudo systemctl disable $SERVICE_NAME<br>
zenity --info --text=&quot;已禁用 <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>S</mi><mi>E</mi><mi>R</mi><mi>V</mi><mi>I</mi><mi>C</mi><msub><mi>E</mi><mi>N</mi></msub><mi>A</mi><mi>M</mi><mi>E</mi><mi mathvariant="normal">的</mi><mi mathvariant="normal">开</mi><mi mathvariant="normal">机</mi><mi mathvariant="normal">自</mi><mi mathvariant="normal">启</mi><mi mathvariant="normal">。</mi><mi mathvariant="normal">&quot;</mi><mo separator="true">;</mo><mo separator="true">;</mo><mi mathvariant="normal">&quot;</mi><mi mathvariant="normal">检</mi><mi mathvariant="normal">查</mi><mi mathvariant="normal">状</mi><mi mathvariant="normal">态</mi><mi mathvariant="normal">&quot;</mi><mo>)</mo><mi>S</mi><mi>Y</mi><mi>S</mi><mi>T</mi><mi>E</mi><mi>M</mi><mi>C</mi><mi>T</mi><msub><mi>L</mi><mi>S</mi></msub><mi>T</mi><mi>A</mi><mi>T</mi><mi>U</mi><mi>S</mi><mo>=</mo></mrow><annotation encoding="application/x-tex">SERVICE_NAME 的开机自启。&quot;
        ;;
    &quot;检查状态&quot;)
        SYSTEMCTL_STATUS=</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">S</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.00773em;">R</span><span class="mord mathdefault" style="margin-right:0.22222em;">V</span><span class="mord mathdefault" style="margin-right:0.07847em;">I</span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.32833099999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.05764em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.10903em;">N</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord cjk_fallback">的</span><span class="mord cjk_fallback">开</span><span class="mord cjk_fallback">机</span><span class="mord cjk_fallback">自</span><span class="mord cjk_fallback">启</span><span class="mord cjk_fallback">。</span><span class="mord">&quot;</span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">&quot;</span><span class="mord cjk_fallback">检</span><span class="mord cjk_fallback">查</span><span class="mord cjk_fallback">状</span><span class="mord cjk_fallback">态</span><span class="mord">&quot;</span><span class="mclose">)</span><span class="mord mathdefault" style="margin-right:0.05764em;">S</span><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="mord mathdefault" style="margin-right:0.05764em;">S</span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mord"><span class="mord mathdefault">L</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.32833099999999993em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.05764em;">S</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mord mathdefault" style="margin-right:0.10903em;">U</span><span class="mord mathdefault" style="margin-right:0.05764em;">S</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span></span></span></span>(sudo systemctl is-enabled <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>S</mi><mi>E</mi><mi>R</mi><mi>V</mi><mi>I</mi><mi>C</mi><msub><mi>E</mi><mi>N</mi></msub><mi>A</mi><mi>M</mi><mi>E</mi><mo>)</mo><mi>z</mi><mi>e</mi><mi>n</mi><mi>i</mi><mi>t</mi><mi>y</mi><mo>−</mo><mo>−</mo><mi>i</mi><mi>n</mi><mi>f</mi><mi>o</mi><mo>−</mo><mo>−</mo><mi>t</mi><mi>e</mi><mi>x</mi><mi>t</mi><mo>=</mo><mi mathvariant="normal">&quot;</mi></mrow><annotation encoding="application/x-tex">SERVICE_NAME)
        zenity --info --text=&quot;</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">S</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.00773em;">R</span><span class="mord mathdefault" style="margin-right:0.22222em;">V</span><span class="mord mathdefault" style="margin-right:0.07847em;">I</span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.32833099999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.05764em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.10903em;">N</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathdefault">A</span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mclose">)</span><span class="mord mathdefault" style="margin-right:0.04398em;">z</span><span class="mord mathdefault">e</span><span class="mord mathdefault">n</span><span class="mord mathdefault">i</span><span class="mord mathdefault">t</span><span class="mord mathdefault" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord">−</span><span class="mord mathdefault">i</span><span class="mord mathdefault">n</span><span class="mord mathdefault" style="margin-right:0.10764em;">f</span><span class="mord mathdefault">o</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.69841em;vertical-align:-0.08333em;"></span><span class="mord">−</span><span class="mord mathdefault">t</span><span class="mord mathdefault">e</span><span class="mord mathdefault">x</span><span class="mord mathdefault">t</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord">&quot;</span></span></span></span>SERVICE_NAME 的当前状态：$SYSTEMCTL_STATUS&quot;<br>
;;<br>
*)<br>
zenity --error --text=&quot;无效的选择。&quot;<br>
;;<br>
Esac<br>
chmod +x ~/MCserver/easy/mcserver-control.sh<br>
7.4 创建脚本的桌面快捷方式<br>
创建 .desktop 文件：<br>
nano ~/桌面/mcserver-control.desktop<br>
在文件中输入以下内容：<br>
[Desktop Entry]<br>
Version=1.0<br>
Type=Application<br>
Name=管理 mcserver.service<br>
Comment=控制 mcserver.service 的开机自启<br>
Exec=/home/ct/MCserver/easy/mcserver-control.sh<br>
Icon=utilities-terminal<br>
Terminal=false<br>
Categories=Utility;<br>
保存并退出。</p>
<ol>
<li>赋予执行权限并标记为可信任：<br>
chmod +x ~/桌面/mcserver-control.desktop<br>
gio set ~/桌面/mcserver-control.desktop metadata::trusted true</li>
</ol>
<hr>
<p>8.配置Mefrpc<br>
8.1安装 screen：<br>
screen 是一个终端复用工具，可以让进程在后台运行，即使关闭终端也不会中断。<br>
安装命令：<br>
sudo apt install screen<br>
8.2创建启动脚本：<br>
1.在 mefrpc 目录下创建 start-mefrpc.sh 脚本：<br>
nano /home/ct/MCserver/mefrpc/start-mefrpc.sh<br>
脚本内容：<br>
#!/bin/bash<br>
cd /home/ct/MCserver/mefrpc<br>
screen -L -Logfile mefrpc.log -dmS mefrpc ./mefrpc -t 0cc8b3057b5bc7435de12973cd990c60 -p 62638<br>
sleep 5  # 等待 screen 会话启动</p>
<p>screen -L -Logfile mefrpc.log：将 screen 会话的输出保存到日志文件。<br>
sleep 5：等待 screen 会话启动，确保 mefrpc 有足够时间运行。</p>
<p>2.赋予脚本执行权限：<br>
chmod +x /home/ct/MCserver/mefrpc/start-mefrpc.sh<br>
8.3通过 /etc/rc.local 设置start-mefrpc.sh开机自启<br>
注意：不能使用服务的方式设置开机自启，mefrp开机启动后会莫名被反复关闭</p>
<ol>
<li>
<p>创建或编辑 /etc/rc.local 文件<br>
打开 /etc/rc.local 文件：<br>
sudo nano /etc/rc.local<br>
添加以下内容：<br>
#!/bin/bash<br>
su - ct -c &quot;/home/ct/MCserver/mefrpc/start-mefrpc.sh&quot;<br>
exit 0<br>
su - ct -c：以 ct 用户身份运行脚本。<br>
exit 0：确保脚本正常退出。<br>
保存并退出（按 Ctrl + O，回车，然后按 Ctrl + X）。</p>
</li>
<li>
<p>赋予 /etc/rc.local 执行权限<br>
赋予执行权限：<br>
sudo chmod +x /etc/rc.local<br>
验证权限：<br>
ls -l /etc/rc.local<br>
输出应显示 -rwxr-xr-x（755 权限）。</p>
</li>
<li>
<p>确保 rc-local.service 已启用<br>
检查 rc-local.service 状态：<br>
systemctl status rc-local.service<br>
如果显示 active (running)，说明已启用。<br>
如果显示 inactive (dead)，需要手动启用：<br>
sudo systemctl enable rc-local.service<br>
sudo systemctl start rc-local.service</p>
</li>
</ol>
<hr>
<ol start="9">
<li>配置图形化控制MC服务端当前状态（运行中/关闭中）的桌面快捷方式<br>
9.1 安装 zenity<br>
确保系统已安装 zenity，用于创建图形化对话框。<br>
sudo apt update<br>
sudo apt install zenity</li>
<li>创建控制脚本<br>
创建一个脚本 (/home/ct/MCserver/control_mc_server.sh)，用于控制 MC 服务端的状态。<br>
nano /home/ct/MCserver/control_mc_server.sh<br>
脚本内容：<br>
#!/bin/bash</li>
</ol>
<h1 id="检查-mcserverservice-的状态">检查 mcserver.service 的状态</h1>
<p>SERVICE_STATUS=$(systemctl is-active mcserver.service)</p>
<h1 id="将状态转换为中文">将状态转换为中文</h1>
<p>if [ &quot;$SERVICE_STATUS&quot; = &quot;active&quot; ]; then<br>
STATUS=&quot;MC服务端正在运行&quot;<br>
ACTIONS=(&quot;停止&quot; &quot;重启&quot;)<br>
else<br>
STATUS=&quot;MC服务端已关闭&quot;<br>
ACTIONS=(&quot;启动&quot;)<br>
fi</p>
<h1 id="使用-zenity-创建图形化对话框">使用 zenity 创建图形化对话框</h1>
<p>ACTION=$(zenity --list <br>
--title=&quot;MC服务端控制&quot; <br>
--text=&quot;当前状态: <span class='katex-error' title='ParseError: KaTeX parse error: Undefined control sequence: \
 at position 9: STATUS&quot; \̲
̲    --column=&quot;操…'>STATUS&quot; \
    --column=&quot;操作&quot; &quot;</span>{ACTIONS[@]}&quot; <br>
--width=300 --height=200)</p>
<h1 id="根据用户选择执行操作">根据用户选择执行操作</h1>
<p>case <span class='katex-error' title='ParseError: KaTeX parse error: Expected &#039;EOF&#039;, got &#039;#&#039; at position 75: …ervice
        #̲ 检查服务是否成功启动
   …'>ACTION in
    &quot;启动&quot;)
        sudo systemctl start mcserver.service
        # 检查服务是否成功启动
        START_STATUS=</span>(systemctl is-active mcserver.service)<br>
if [ &quot;<span class='katex-error' title='ParseError: KaTeX parse error: Expected &#039;EOF&#039;, got &#039;#&#039; at position 310: …ervice
        #̲ 再次检查状态以确保服务已停止…'>START_STATUS&quot; = &quot;active&quot; ]; then
            zenity --info --title=&quot;MC服务端&quot; --text=&quot;MC服务端已启动&quot; --width=300 --height=100
        else
            zenity --error --title=&quot;MC服务端&quot; --text=&quot;MC服务端启动失败，请检查日志&quot; --width=300 --height=100
        fi
        ;;
    &quot;停止&quot;)
        sudo systemctl stop mcserver.service
        # 再次检查状态以确保服务已停止
        STOP_STATUS=</span>(systemctl is-active mcserver.service)<br>
if [ &quot;$STOP_STATUS&quot; = &quot;inactive&quot; ]; then<br>
zenity --info --title=&quot;MC服务端&quot; --text=&quot;MC服务端已停止&quot; --width=300 --height=100<br>
else<br>
zenity --error --title=&quot;MC服务端&quot; --text=&quot;无法停止MC服务端，请检查日志&quot; --width=300 --height=100<br>
fi<br>
;;<br>
&quot;重启&quot;)<br>
sudo systemctl restart mcserver.service<br>
zenity --info --title=&quot;MC服务端&quot; --text=&quot;MC服务端已重启&quot; --width=300 --height=100<br>
;;<br>
*)<br>
# 用户取消操作<br>
exit 0<br>
;;<br>
esac<br>
保存并退出编辑器。</p>
<ol start="2">
<li>
<p>使脚本可执行<br>
为脚本添加可执行权限：<br>
chmod +x /home/ct/MCserver/control_mc_server.sh</p>
</li>
<li>
<p>创建桌面快捷方式<br>
创建一个桌面快捷方式文件 (~/桌面/MC_Control.desktop)。<br>
nano ~/桌面/MC_Control.desktop<br>
文件内容：<br>
[Desktop Entry]<br>
Version=1.0<br>
Type=Application<br>
Name=MC服务端控制<br>
Exec=/home/ct/MCserver/control_mc_server.sh<br>
Icon=utilities-terminal<br>
Terminal=false<br>
保存并退出编辑器。</p>
</li>
<li>
<p>标记快捷方式为可信任<br>
使用 gio set 命令将快捷方式标记为可信任：<br>
gio set ~/桌面/MC_Control.desktop metadata::trusted true</p>
</li>
</ol>
<hr>
<p>10.配置图形化控制 mefrpc 是否开机启动的桌面快捷方式</p>
<ol>
<li>创建控制脚本<br>
在 /home/ct/MCserver/mefrpc/ 目录下创建控制脚本 (control_mefrpc_autostart.sh)。<br>
nano /home/ct/MCserver/mefrpc/control_mefrpc_autostart.sh<br>
脚本内容：<br>
#!/bin/bash</li>
</ol>
<h1 id="检查-etcrclocal-是否包含-mefrpc-启动命令">检查 /etc/rc.local 是否包含 mefrpc 启动命令</h1>
<p>RC_LOCAL=&quot;/etc/rc.local&quot;<br>
MEFRPC_CMD='su - ct -c &quot;/home/ct/MCserver/mefrpc/start-mefrpc.sh&quot;'</p>
<h1 id="检查是否已启用开机启动">检查是否已启用开机启动</h1>
<p>if grep -Fxq &quot;<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>M</mi><mi>E</mi><mi>F</mi><mi>R</mi><mi>P</mi><msub><mi>C</mi><mi>C</mi></msub><mi>M</mi><mi>D</mi><mi mathvariant="normal">&quot;</mi><mi mathvariant="normal">&quot;</mi></mrow><annotation encoding="application/x-tex">MEFRPC_CMD&quot; &quot;</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.84444em;vertical-align:-0.15em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span><span class="mord mathdefault" style="margin-right:0.00773em;">R</span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.32833099999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.07153em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.07153em;">C</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.02778em;">D</span><span class="mord">&quot;</span><span class="mord">&quot;</span></span></span></span>RC_LOCAL&quot;; then<br>
AUTOSTART_STATUS=&quot;已启用&quot;<br>
ACTIONS=(&quot;禁用开机启动&quot;)<br>
else<br>
AUTOSTART_STATUS=&quot;已禁用&quot;<br>
ACTIONS=(&quot;启用开机启动&quot;)<br>
fi</p>
<h1 id="使用-zenity-创建图形化对话框-2">使用 zenity 创建图形化对话框</h1>
<p>ACTION=$(zenity --list <br>
--title=&quot;mefrpc 开机启动控制&quot; <br>
--text=&quot;当前开机启动状态: <span class='katex-error' title='ParseError: KaTeX parse error: Undefined control sequence: \
 at position 19: …OSTART_STATUS&quot; \̲
̲    --column=&quot;操…'>AUTOSTART_STATUS&quot; \
    --column=&quot;操作&quot; &quot;</span>{ACTIONS[@]}&quot; <br>
--width=300 --height=200)</p>
<h1 id="根据用户选择执行操作-2">根据用户选择执行操作</h1>
<p>case <span class='katex-error' title='ParseError: KaTeX parse error: Expected &#039;EOF&#039;, got &#039;#&#039; at position 33: …开机启动&quot;)
        #̲ 在 /etc/rc.loca…'>ACTION in
    &quot;启用开机启动&quot;)
        # 在 /etc/rc.local 中添加启动命令
        if ! grep -Fxq &quot;</span>MEFRPC_CMD&quot; &quot;$RC_LOCAL&quot;; then<br>
sudo sed -i &quot;/^exit 0/i <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>M</mi><mi>E</mi><mi>F</mi><mi>R</mi><mi>P</mi><msub><mi>C</mi><mi>C</mi></msub><mi>M</mi><mi>D</mi><mi mathvariant="normal">&quot;</mi><mi mathvariant="normal">&quot;</mi></mrow><annotation encoding="application/x-tex">MEFRPC_CMD&quot; &quot;</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.84444em;vertical-align:-0.15em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span><span class="mord mathdefault" style="margin-right:0.00773em;">R</span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.32833099999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.07153em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.07153em;">C</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.02778em;">D</span><span class="mord">&quot;</span><span class="mord">&quot;</span></span></span></span>RC_LOCAL&quot;<br>
fi<br>
zenity --info --title=&quot;mefrpc&quot; --text=&quot;已启用 mefrpc 的开机启动&quot; --width=300 --height=100<br>
;;<br>
&quot;禁用开机启动&quot;)<br>
# 从 /etc/rc.local 中删除启动命令<br>
if grep -Fxq &quot;<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>M</mi><mi>E</mi><mi>F</mi><mi>R</mi><mi>P</mi><msub><mi>C</mi><mi>C</mi></msub><mi>M</mi><mi>D</mi><mi mathvariant="normal">&quot;</mi><mi mathvariant="normal">&quot;</mi></mrow><annotation encoding="application/x-tex">MEFRPC_CMD&quot; &quot;</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.84444em;vertical-align:-0.15em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span><span class="mord mathdefault" style="margin-right:0.00773em;">R</span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.32833099999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.07153em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.07153em;">C</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.02778em;">D</span><span class="mord">&quot;</span><span class="mord">&quot;</span></span></span></span>RC_LOCAL&quot;; then<br>
sudo sed -i &quot;|^<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>M</mi><mi>E</mi><mi>F</mi><mi>R</mi><mi>P</mi><msub><mi>C</mi><mi>C</mi></msub><mi>M</mi><mi>D</mi><mi mathvariant="normal">∣</mi><mi>d</mi><mi mathvariant="normal">&quot;</mi><mi mathvariant="normal">&quot;</mi></mrow><annotation encoding="application/x-tex">MEFRPC_CMD|d&quot; &quot;</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span><span class="mord mathdefault" style="margin-right:0.00773em;">R</span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.32833099999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.07153em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.07153em;">C</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mord mathdefault" style="margin-right:0.02778em;">D</span><span class="mord">∣</span><span class="mord mathdefault">d</span><span class="mord">&quot;</span><span class="mord">&quot;</span></span></span></span>RC_LOCAL&quot;<br>
fi<br>
zenity --info --title=&quot;mefrpc&quot; --text=&quot;已禁用 mefrpc 的开机启动&quot; --width=300 --height=100<br>
;;<br>
*)<br>
# 用户取消操作<br>
exit 0<br>
;;<br>
esac<br>
保存并退出编辑器。</p>
<ol start="2">
<li>
<p>使脚本可执行<br>
为脚本添加可执行权限：<br>
chmod +x /home/ct/MCserver/mefrpc/control_mefrpc_autostart.sh</p>
</li>
<li>
<p>创建桌面快捷方式<br>
创建一个桌面快捷方式文件 (~/桌面/mefrpc_Autostart_Control.desktop)。<br>
nano ~/桌面/mefrpc_Autostart_Control.desktop<br>
文件内容：<br>
[Desktop Entry]<br>
Version=1.0<br>
Type=Application<br>
Name=mefrpc 开机启动控制<br>
Exec=gnome-terminal -- bash -c &quot;/home/ct/MCserver/mefrpc/control_mefrpc_autostart.sh; exit&quot;<br>
Icon=utilities-terminal<br>
Terminal=false<br>
保存并退出编辑器。</p>
</li>
<li>
<p>标记快捷方式为可信任<br>
使用 gio set 命令将快捷方式标记为可信任：<br>
gio set ~/桌面/mefrpc_Autostart_Control.desktop metadata::trusted true<br>
如果 gio set 无效，可以右键点击快捷方式，选择“属性”，在“权限”选项卡中勾选“允许执行文件作为程序”。</p>
</li>
</ol>
<hr>
<ol start="11">
<li>
<p>配置图形化控制 mefrpc 当前状态（运行中/关闭中）的桌面快捷方式</p>
</li>
<li>
<p>创建控制脚本<br>
在 /home/ct/MCserver/mefrpc/ 目录下创建控制脚本 (control_mefrpc_status.sh)。<br>
nano /home/ct/MCserver/mefrpc/control_mefrpc_status.sh<br>
脚本内容：<br>
#!/bin/bash</p>
</li>
</ol>
<h1 id="检查-mefrpc-是否在运行">检查 mefrpc 是否在运行</h1>
<p>if screen -list | grep -q &quot;mefrpc&quot;; then<br>
STATUS=&quot;mefrpc 正在运行&quot;<br>
ACTIONS=(&quot;停止&quot; &quot;重启&quot; &quot;查看启动代码&quot; &quot;修改启动代码&quot;)<br>
else<br>
STATUS=&quot;mefrpc 已关闭&quot;<br>
ACTIONS=(&quot;启动&quot; &quot;查看启动代码&quot; &quot;修改启动代码&quot;)<br>
fi</p>
<h1 id="使用-zenity-创建图形化对话框-3">使用 zenity 创建图形化对话框</h1>
<p>ACTION=$(zenity --list <br>
--title=&quot;mefrpc 状态控制&quot; <br>
--text=&quot;当前状态: <span class='katex-error' title='ParseError: KaTeX parse error: Undefined control sequence: \
 at position 9: STATUS&quot; \̲
̲    --column=&quot;操…'>STATUS&quot; \
    --column=&quot;操作&quot; &quot;</span>{ACTIONS[@]}&quot; <br>
--width=300 --height=200)</p>
<h1 id="根据用户选择执行操作-3">根据用户选择执行操作</h1>
<p>case <span class='katex-error' title='ParseError: KaTeX parse error: Expected &#039;EOF&#039;, got &#039;#&#039; at position 512: …启动代码&quot;)
        #̲ 显示当前启动代码
     …'>ACTION in
    &quot;启动&quot;)
        /home/ct/MCserver/mefrpc/start-mefrpc.sh
        zenity --info --title=&quot;mefrpc&quot; --text=&quot;mefrpc 已启动&quot; --width=300 --height=100
        ;;
    &quot;停止&quot;)
        screen -S mefrpc -X quit
        zenity --info --title=&quot;mefrpc&quot; --text=&quot;mefrpc 已停止&quot; --width=300 --height=100
        ;;
    &quot;重启&quot;)
        screen -S mefrpc -X quit
        /home/ct/MCserver/mefrpc/start-mefrpc.sh
        zenity --info --title=&quot;mefrpc&quot; --text=&quot;mefrpc 已重启&quot; --width=300 --height=100
        ;;
    &quot;查看启动代码&quot;)
        # 显示当前启动代码
        START_CODE=</span>(grep -oP '(?&lt;=screen -L -Logfile mefrpc.log -dmS mefrpc ).<em>' /home/ct/MCserver/mefrpc/start-mefrpc.sh)<br>
zenity --info --title=&quot;mefrpc 启动代码&quot; --text=&quot;当前启动代码:\n<span class='katex-error' title='ParseError: KaTeX parse error: Expected &#039;EOF&#039;, got &#039;#&#039; at position 71: …启动代码&quot;)
        #̲ 获取当前启动代码
     …'>START_CODE&quot; --width=400 --height=200
        ;;
    &quot;修改启动代码&quot;)
        # 获取当前启动代码
        CURRENT_CODE=</span>(grep -oP '(?&lt;=screen -L -Logfile mefrpc.log -dmS mefrpc ).</em>' /home/ct/MCserver/mefrpc/start-mefrpc.sh)<br>
# 使用 zenity 输入新启动代码<br>
NEW_CODE=<span class='katex-error' title='ParseError: KaTeX parse error: Undefined control sequence: \
 at position 17: …zenity --entry \̲
̲            --t…'>(zenity --entry \
            --title=&quot;修改 mefrpc 启动代码&quot; \
            --text=&quot;当前启动代码:\n</span>CURRENT_CODE&quot; <br>
--entry-text=&quot;<span class='katex-error' title='ParseError: KaTeX parse error: Undefined control sequence: \
 at position 15: CURRENT_CODE&quot; \̲
̲            --w…'>CURRENT_CODE&quot; \
            --width=400)
        if [ -n &quot;</span>NEW_CODE&quot; ]; then<br>
# 更新启动脚本中的启动代码<br>
sed -i &quot;s|screen -L -Logfile mefrpc.log -dmS mefrpc .*|screen -L -Logfile mefrpc.log -dmS mefrpc <span class='katex-error' title='ParseError: KaTeX parse error: Undefined control sequence: \n at position 113: …text=&quot;启动代码已更新为:\̲n̲'>NEW_CODE|&quot; /home/ct/MCserver/mefrpc/start-mefrpc.sh
            zenity --info --title=&quot;mefrpc&quot; --text=&quot;启动代码已更新为:\n</span>NEW_CODE&quot; --width=400 --height=200<br>
else<br>
zenity --error --title=&quot;mefrpc&quot; --text=&quot;未输入新的启动代码，更新取消&quot; --width=300 --height=100<br>
fi<br>
;;<br>
*)<br>
# 用户取消操作<br>
exit 0<br>
;;<br>
esac<br>
保存并退出编辑器。<br>
2. 使脚本可执行<br>
为脚本添加可执行权限：<br>
chmod +x /home/ct/MCserver/mefrpc/control_mefrpc_status.sh<br>
3. 创建桌面快捷方式<br>
创建一个桌面快捷方式文件 (~/桌面/mefrpc状态控制.desktop)。<br>
nano ~/桌面/mefrpc状态控制.desktop<br>
文件内容：<br>
[Desktop Entry]<br>
Version=1.0<br>
Type=Application<br>
Name=mefrpc状态控制<br>
Exec=gnome-terminal -- bash -c &quot;/home/ct/MCserver/mefrpc/control_mefrpc_status.sh; exit&quot;<br>
Icon=utilities-terminal<br>
Terminal=false<br>
保存并退出编辑器。<br>
4. 标记快捷方式为可信任<br>
使用 gio set 命令将快捷方式标记为可信任：<br>
gio set ~/桌面/mefrpc状态控制.desktop metadata::trusted true</p>
<hr>
<ol start="12">
<li>配置配置 MCSM 的桌面快捷方式</li>
<li>创建桌面快捷方式<br>
创建一个桌面快捷方式文件 (~/桌面/MCSM.desktop)。<br>
nano ~/桌面/MCSM.desktop<br>
在文件中输入以下内容：<br>
[Desktop Entry]<br>
Version=1.0<br>
Type=Application<br>
Name=MCSM 管理页面<br>
Exec=xdg-open http://localhost:23333/#/<br>
Icon=web-browser<br>
Terminal=false<br>
保存并退出编辑器。</li>
<li>标记快捷方式为可信任<br>
使用 gio set 命令将快捷方式标记为可信任：<br>
gio set ~/桌面/MCSM.desktop metadata::trusted true</li>
</ol>

            </div>
            
              <div class="tag-container">
                
                  <a href="http://gitee.com/tag/5rOtW2xBXZ/" class="tag">
                    Ubuntu
                  </a>
                
                  <a href="http://gitee.com/tag/hOvp3SA_3FU/" class="tag">
                    Minecraft
                  </a>
                
                  <a href="http://gitee.com/tag/aEWrQXL0Jre/" class="tag">
                    服务器
                  </a>
                
              </div>
            
            

            

          </div>

        </div>
      </div>
    </div>

    <script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script type="application/javascript">

AOS.init();

var app = new Vue({
  el: '#app',
  data: {
    menuVisible: false,
  },
})

</script>






  </body>
</html>
